25. Exercise: Static Members
Static
Static Members
Class members can be declared static
, which means that the member belongs to the entire class, instead of to a specific instance of the class. More specifically, a static
member is created only once and then shared by all instances (i.e. objects) of the class. That means that if the static
member gets changed, either by a user of the class or within a member function of the class itself, then all members of the class will see that change the next time they access the static
member.
A second static counter
SOLUTION:
No, because the new static attribute `counter` is defined within the `Cube` class, it has nothing to do with `Sphere::counter`.Implementation
static
members are declared within their class
(often in a header file) but in most cases they must be defined within the global scope. That's because memory is allocated for static
variables immediately when the program begins, at the same time any global variables are initialized.
Here is an example:
#include <cassert>
class Foo {
public:
static int count;
Foo() { Foo::count += 1; }
};
int Foo::count{0};
int main() {
Foo f{};
assert(Foo::count == 1);
}
An exception to the global definition of static
members is if such members can be marked as constexpr
. In that case, the static
member variable can be both declared and defined within the class
definition:
struct Kilometer {
static constexpr int meters{1000};
};
Exercise: Pi
class Sphere
has a member const double pi
. Experiment with specifying pi
to be const
, constexpr
, and static
. Which specifications work and which break? Do you understand why?
Workspace
This section contains either a workspace (it can be a Jupyter Notebook workspace or an online code editor work space, etc.) and it cannot be automatically downloaded to be generated here. Please access the classroom with your account and manually download the workspace to your local machine. Note that for some courses, Udacity upload the workspace files onto https://github.com/udacity, so you may be able to download them there.
Workspace Information:
- Default file path:
- Workspace type: jupyter
- Opened files (when workspace is loaded): n/a